/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.uca.sisbec.actions.gastos;

import com.uca.sisbec.commons.HibernateAction;
import com.uca.sisbec.forms.gastos.GastosProyectosForm;
import com.uca.sisbec.helpers.gastos.GastosProyectosHelper;
import com.uca.sisbec.helpers.gastos.PresupuestoHelper;
import com.uca.sisbec.mapping.Usuario;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;

/**
 *
 * @author Alex
 */
public class GastosProyectosAction extends HibernateAction {
    
    public ActionForward init(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        PresupuestoHelper ph = new PresupuestoHelper(getSession(request));
        if(ph.ExistePresupuestoMesActual()){
            request.setAttribute("extra", "yes");
        } else {
            request.setAttribute("extra", "no");
        }
        form.reset(mapping, request);
        request.setAttribute("save", "new");
        return mapping.findForward("success");
    }
    
    public ActionForward initBusqueda(ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        return mapping.findForward("search");
    }
    
    public ActionForward RegistrarGastoProy(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        GastosProyectosForm gpf = (GastosProyectosForm) form;
        
        PresupuestoHelper ph = new PresupuestoHelper(getSession(request));
        if(ph.ExistePresupuestoMesActual()){
            request.setAttribute("extra", "yes");
        } else {
            request.setAttribute("extra", "no");
        }
        
        GastosProyectosHelper gph = new GastosProyectosHelper(getSession(request));
        ActionErrors errors = new ActionErrors();
        ActionMessages msg = new ActionMessages();
        
        if(gpf.getMonto() <= 0 || gpf.getMonto() > 999.99){
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("gasto.invalido"));
            request.setAttribute("errors", errors);
            request.setAttribute("save", "new");
        }else{
            if(gpf.getConcepto() == null || gpf.getConcepto().trim().equals("")){
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("concepto.vacio"));
                request.setAttribute("errors", errors);
                request.setAttribute("save", "new");
            }else{
                if(gpf.getProyecto().equals("N/A")){
                    errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("proyecto.noseleccionado"));
                    request.setAttribute("errors", errors);
                    request.setAttribute("save", "new");
                }else{
                    int idgp = gph.RegistrarGastoProyectoDB(gpf,GetUsuario(request));
                    gpf.setIdGastosProyecto(idgp);
                    msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("gasto.nuevo"));
                    request.setAttribute("msg", msg);
                    request.setAttribute("save", "update");
                }
            }
        }
        return mapping.findForward("success");
    }
            
    public ActionForward BuscarGastoProy(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        GastosProyectosHelper gph = new GastosProyectosHelper(getSession(request));
        GastosProyectosForm gpf = (GastosProyectosForm) form;
        request.setAttribute("gastosProyData", gph.BuscarGastosDeProyectosDB(gpf));
        return mapping.findForward("search");
    }
    
    public ActionForward ModificarGastoProy(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        GastosProyectosForm gpf = (GastosProyectosForm) form;
        GastosProyectosHelper gph = new GastosProyectosHelper(getSession(request));
        ActionErrors errors = new ActionErrors();
        if(gpf.getMonto() <= 0 && gpf.getMonto() > 999.99){
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("gasto.invalido"));
            request.setAttribute("errors", errors);
        } else {
            if(gpf.getJustificacion().trim().equals("")) {
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("justificacion.vacia"));
                request.setAttribute("errors", errors);
            } else {
                if(gpf.getEstado().equals("N/A")) {
                    errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("estado.noseleccionado"));
                    request.setAttribute("errors", errors);
                } else {
                    gph.ModificarGastoProyDB(gpf, GetUsuario(request));
                    ActionMessages msg = new ActionMessages();
                    msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("gasto.modificado"));
                    request.setAttribute("msg", msg);
                    request.setAttribute("save", "new");
                }
            }
        }
        gpf.reset(mapping, request);
        PresupuestoHelper ph = new PresupuestoHelper(getSession(request));
        if(ph.ExistePresupuestoMesActual()){
            request.setAttribute("extra", "yes");
        } else {
            request.setAttribute("extra", "no");
        }
        return mapping.findForward("success");
    }
    
    public ActionForward SeleccionarGastoProy(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        GastosProyectosForm gpf = (GastosProyectosForm) form;
        GastosProyectosHelper gph = new GastosProyectosHelper(getSession(request));
        gph.BuscarGastoDB(gpf.getIdGastosProyecto(), gpf);
        request.setAttribute("save", "update");
        PresupuestoHelper ph = new PresupuestoHelper(getSession(request));
        if(ph.ExistePresupuestoMesActual()){
            request.setAttribute("extra", "yes");
        } else {
            request.setAttribute("extra", "no");
        }
        return mapping.findForward("success");
    }
    
    private String GetUsuario(HttpServletRequest request){
        Usuario u = (Usuario) request.getSession().getAttribute(_USER);
        return u.getAlias();
    }
    
}
